package org.ejb.entities;


import javax.persistence.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.Set;

/**
 * Cette classe represente une Annonce
 * Une annonce est un item qu'un utilisateur enregistre propose de vendre au site
 */

@SuppressWarnings("serial")
@Entity
public class Annonce implements Serializable {

    /**
	 * 
	 */
	
	// ======================================
    // =             Attributs              =
    // ======================================
	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private Date date;
    private String details;
    
    @ManyToOne
    private Utilisateur utilisateur;
   

    // ======================================
    // =             Constantes             =
    // ======================================

    // ======================================
    // =            Constructeurs           =
    // ======================================
    public Annonce() {
    }

    public Annonce(String details) {
        this.details = details;
    }
    
    public Annonce(String details, Date date) {
        this.date = date;
        this.details = details;
    }
    


    // ======================================
 	// = Methodes Lifecycle Callback =
 	// ======================================
 	@SuppressWarnings("unused")
 	@PrePersist
 	@PreUpdate
 	private void validateData() {
 		if (date == null || "".equals(date))
 			throw new ValidationException("Invalid date");
 		//detail peut etre null, sinon on peut limiter dans la page web
 		if (details == null || "".equals(details))
 			throw new ValidationException("Invalid details");
 	}

 	
    // ======================================
    // =          Methodes publiques        =
    // ======================================

    // ======================================
    // =          Methodes Protegees        =
    // ======================================

    // ======================================
    // =             Accesseurs             =
    // ======================================

 	 public Long getId() {
 		return id;
 	}
 	public void setId(Long id) {
 		this.id = id;
 	}

	@Column(nullable = false)
 	public Date getDate() {
 		return date;
 	}
 	public void setDate(Date date) {
 		this.date = date;
 	}

 	public String getDetails() {
 		return details;
 	}
 	public void setDetails(String details) {
 		this.details = details;
 	}

 	
 	public Utilisateur getUtilisateur() {
 		return utilisateur;
 	}
 	public void setUtilisateur(Utilisateur utilisateur) {
 		this.utilisateur = utilisateur;
 		this.utilisateur.getAnnonce().add(this);
 	}

    // ======================================
    // =           Methodes Privees         =
    // ======================================

    // ======================================
    // =   Methodes hash, equals, toString  =
    // ======================================
    
 	
// 	@Override
//	public int hashCode() {
//		final int prime = 31;
//		int result = 1;
//		result = prime * result + ((aid == null) ? 0 : aid.hashCode());
//		result = prime * result + ((date == null) ? 0 : date.hashCode());
//		result = prime * result + ((details == null) ? 0 : details.hashCode());
//		result = prime * result
//				+ ((utilisateur == null) ? 0 : utilisateur.hashCode());
//		return result;
//	}

 	//Si deux annonce pareil, return true
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Annonce other = (Annonce) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (date == null) {
			if (other.date != null)
				return false;
		} else if (!date.equals(other.date))
			return false;
		if (details == null) {
			if (other.details != null)
				return false;
		} else if (!details.equals(other.details))
			return false;
		if (utilisateur == null) {
			if (other.utilisateur != null)
				return false;
		} else if (!utilisateur.equals(other.utilisateur))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Annonce [aid=" + id + ", date=" + date + ", details="
				+ details + ", utilisateur=" + utilisateur + "]";
	}
	 	
}
